From: Andrew Cooper Date: Wed, 1 Mar 2017 18:46:52 +0000 (+0000) Subject: tools/insn-fuzz: Make use of LLVMFuzzerInitialize() X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~2442 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success//%22http:/www.example.com/cgi/success/?a=commitdiff_plain;h=63092064eb1e6268357516715245a481db653e13;p=xen.git tools/insn-fuzz: Make use of LLVMFuzzerInitialize() libfuzz can perform one-time initialisation by calling LLVMFuzzerInitialize(). Move emul_test_init() into this, to avoid repeating it on every LLVMFuzzerTestOneInput() call. Signed-off-by: Andrew Cooper Reviewed-by: Wei Liu --- diff --git a/tools/fuzz/x86_instruction_emulator/afl-harness.c b/tools/fuzz/x86_instruction_emulator/afl-harness.c index 89d8605fea..63aff5904b 100644 --- a/tools/fuzz/x86_instruction_emulator/afl-harness.c +++ b/tools/fuzz/x86_instruction_emulator/afl-harness.c @@ -5,6 +5,7 @@ #include #include +extern int LLVMFuzzerInitialize(int *argc, char ***argv); extern int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size); extern unsigned int fuzz_minimal_input_size(void); @@ -57,6 +58,9 @@ int main(int argc, char **argv) else if ( optind != (argc - 1) ) goto usage; + if ( LLVMFuzzerInitialize(&argc, &argv) ) + exit(-1); + if ( fp != stdin ) /* If not using stdin, open the provided file. */ { fp = fopen(argv[optind], "rb"); diff --git a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c index 4b1e324d06..3b3041d151 100644 --- a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c +++ b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c @@ -646,9 +646,19 @@ static void sanitize_input(struct x86_emulate_ctxt *ctxt) } } +int LLVMFuzzerInitialize(int *argc, char ***argv) +{ + if ( !emul_test_init() ) + { + printf("Warning: Stack could not be made executable (%d).\n", errno); + return 1; + } + + return 0; +} + int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) { - bool stack_exec; struct cpu_user_regs regs = {}; struct x86_emulate_ctxt ctxt = { .regs = ®s, @@ -657,13 +667,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data_p, size_t size) }; int rc; - stack_exec = emul_test_init(); - if ( !stack_exec ) - { - printf("Warning: Stack could not be made executable (%d).\n", errno); - return 1; - } - /* Reset all global state variables */ memset(&input, 0, sizeof(input)); data_index = 0;